﻿using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;

namespace AccountManagement
{
    /// <summary>
    /// 
    /// </summary>
    public class DropDownButton : ToggleButton
    {
        static DropDownButton()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(DropDownButton), new FrameworkPropertyMetadata(typeof(DropDownButton)));
        }
        
        public static readonly DependencyProperty DropDownProperty = DependencyProperty.Register("DropDown", typeof(ContextMenu), typeof(DropDownButton), 
                                                                                                  new UIPropertyMetadata(null));

        public static readonly DependencyProperty DropDownStyleProperty = DependencyProperty.Register("DropDownStyle", typeof(Style), typeof(DropDownButton), 
                                                                                                       new PropertyMetadata(null, OnDropDownStyleChanged));

        public DropDownButton()
        {
            //create the contextmenu; it can not be created on the static method
            var dropDownMnu = new ContextMenu();
            //var menu = new List<CheckBox>
            //               {
            //                   new CheckBox{Content = "All", IsChecked = true}, 
            //                   new CheckBox{Content = "Test1", IsChecked = false}, 
            //                   new CheckBox{Content = "Test2", IsChecked = false}
            //               };
            //dropDownMnu.ItemsSource = menu;
            DropDown = dropDownMnu;
            //create the binding
            var binding = new Binding("DropDown.IsOpen") {Source = this};
            SetBinding(IsCheckedProperty, binding);

            DefaultStyleKey = typeof(DropDownButton);
            
        }

        public ContextMenu DropDown
        {
            get { return (ContextMenu)GetValue(DropDownProperty); }
            set { SetValue(DropDownProperty, value); }
        }

        public Style DropDownStyle
        {
            get { return (Style)GetValue(DropDownStyleProperty); }
            set { SetValue(DropDownStyleProperty, value); }
        }

        private static void OnDropDownStyleChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e)
        {
            var button = depObj as DropDownButton;
            if (button != null)
                if (button.DropDown != null)
                {
                    button.DropDown.Style = e.NewValue as Style;
                }
        }
    }
}
